home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / enigma / earcd / utility / utilfile / xpksourc.lha / xpk_Source / examples / xsum.c < prev    next >
C/C++ Source or Header  |  1996-10-19  |  2KB  |  62 lines

  1. /* XSum.c - sums up all bytes in a compressed or uncompressed file
  2.  *
  3.  * This is a typical read-and-process xpk application. Try it out... XSum a
  4.  * file, then compress it and XSum it again. The result should be the same.
  5.  */
  6.  
  7. #include <proto/exec.h>
  8. #include <proto/dos.h>
  9. #include <proto/xpk.h>
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <string.h>
  13.  
  14. struct Library *XpkBase = NULL;
  15.  
  16. char errbuf[XPKERRMSGSIZE + 1], *outbuf = NULL;
  17. long outlen, outbuflen;
  18.  
  19. void 
  20. end (char *text)
  21. {
  22.   if (outbuf)
  23.     FreeMem (outbuf, outbuflen);
  24.   if (text)
  25.     Write (Output (), text, strlen (text));
  26.   if (XpkBase)
  27.     CloseLibrary (XpkBase);
  28.   exit (text ? 10 : 0);
  29. }
  30.  
  31. void 
  32. main (int argc, char *argv[])
  33. {
  34.   UBYTE *ptr, *last;
  35.   ULONG sum = 0;
  36.  
  37.   if (!(XpkBase = OpenLibrary (XPKNAME, 0)))
  38.     end ("Cannot open " XPKNAME "\n");
  39.  
  40.   if (argc != 2)
  41.     end ("Usage: XChecksum filename\n");
  42.  
  43.   if (XpkUnpackTags (
  44.               XPK_InName, argv[1],    /* The file name to be read              */
  45.               XPK_GetError, errbuf,    /* A pointer to the error message buffer */
  46.               XPK_GetOutBuf, &outbuf,    /* Sets a pointer to the output buffer   */
  47.               XPK_GetOutLen, &outlen,    /* Sets the number of bytes written      */
  48.               XPK_GetOutBufLen, &outbuflen,    /* Sets the length of the output buffer  */
  49.               XPK_PassThru, TRUE,    /* Will pass through uncompressed data   */
  50.               TAG_DONE
  51.       ))
  52.     end (strcat (errbuf, "\n"));
  53.  
  54.   ptr = (UBYTE *) outbuf;
  55.   last = ptr + outlen;
  56.   while (ptr < last)
  57.     sum += *ptr++;
  58.   printf ("%d\n", sum);
  59.  
  60.   end (NULL);
  61. }
  62.